import spb.sdk
print(f'This guide was made with this version: v{spb.sdk.__version__}')
client = spb.sdk.Client(project_name='SDK Test Project')
# Print project information
print('Project Name: {}'.format(client.get_project_name()))
print('Total number of data: {}'.format(client.get_num_data()))
IMAGE_DIR = 'coco-sample/*.jpg' # Set proper image path for your usage
DATASET = 'coco-sample' # Set proper dataset name you want
import glob
import os
for image_path in glob.glob(IMAGE_DIR):
image_name = os.path.basename(image_path)
# Without key, upload_image function will use file name for data key as default
# (dataset, data key) pair must be unique
client.upload_image(image_path, DATASET, key=image_name)
You can check your uploaded images in your Suite Web (Label list of created project)
SDK also provides shortcut for uploading images from your own S3.
# Iterate all data in dataset
def get_data(dataset, page_size=10):
num_data = client.get_num_data(dataset=dataset)
print(f'# of images in {DATASET}: {num_data}')
num_page = (num_data + page_size - 1) // page_size
for page_idx in range(num_page):
for data_handler in client.get_data_page(page_idx=page_idx, page_size=page_size, dataset=dataset):
yield data_handler
uploaded_data = {}
for data_handler in get_data(DATASET):
dataset = data_handler.get_dataset_name()
data_key = data_handler.get_key()
uploaded_data[(dataset, data_key)] = data_handler
print(list(uploaded_data.keys()))
try:
data_handler = next(client.get_data_page(page_idx=0, page_size=1, dataset=DATASET, data_key='3.jpg'))
except StopIteration:
print('Data with this key does not exist')
else:
print(f'Successfully retrieved ({data_handler.get_dataset_name()}, {data_handler.get_key()})')
# 3.jpg annotation sample
# you can get data_handler by iterating data lists or just specifying dataset & key like shown above
data_handler = uploaded_data[(DATASET, '3.jpg')]
# For categories, use list of category names
category = ['clear']
# For objects, box and polygon looks like below.
# For more example, please refer to https://docs.superb-ai.com/user-manual/manipulate-labels/export-result-format#annotations
objects = [
{
"id": 1,
"class": "Person",
"shape": {
"box": {
"x": 56.2,
"y": 201.7,
"width": 58.4,
"height": 119.5
}
},
"properties": [
{
"name": "Occluded",
"value": "No" # single value for multiple choice property (single answer, like radio)
},
{
"name": "Accessaries",
"value": [
"handbag" # list of values for multiple selection property (like checkbox)
]
}
]
},
{
"id": 2,
"class": "Car",
"shape": {
"polygon": [
{
"x": 266.3,
"y": 201.3
},
{
"x": 258.4,
"y": 209.7
},
{
"x": 251.7,
"y": 209.7
},
{
"x": 250.4,
"y": 228.3
},
{
"x": 282.3,
"y": 224.7
},
{
"x": 306.6,
"y": 224.3
},
{
"x": 307.0,
"y": 206.1
},
{
"x": 299.9,
"y": 197.3
}
]
},
"properties": [
{
"name": "Number",
"value": "N/A" # simple, string for free response
}
]
}
]
data_handler.set_category_labels(category)
data_handler.set_object_labels(objects)
You can check uploaded annotations visually via Suite Web
Or you can also check annotations using SDK data handler!!!
print(data_handler.get_category_labels())
print([data['class'] for data in data_handler.get_object_labels()])
images = {}
for data_handler in get_data(DATASET):
dataset = data_handler.get_dataset_name()
data_key = data_handler.get_key()
images[(dataset, data_key)] = data_handler
import random
from PIL import Image
from IPython.display import display
import requests
data_handler = random.choice(list(images.values()))
print(data_handler.get_key())
image_url = data_handler.get_image_url()
img = Image.open(requests.get(image_url, stream=True).raw)
display(img)